package com.xfcy.blog.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xfcy.blog.entity.Tags;
import com.xfcy.blog.vo.TagVO;
import com.xfcy.blog.vo.TagsCountVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 博客标签表(Tags)表数据库访问层
 *
 * @author 晓风残月Lx
 * @since 2023-04-09 11:03:06
 */
@Repository
public interface TagsMapper extends BaseMapper<Tags> {


    /**
     * 后台标签分页
     *
     * @param objectPage
     * @param name
     * @return
     */
    Page<TagsCountVO> selectPageRecord(@Param("page") Page<Object> objectPage, @Param("name") String name);


    // Web 前台方法
    /**
     *  查出所有标签
     * @return
     */
    List<TagVO> selectAll();

    /**
     * 查出文章对应的标签
     * @param id
     * @return
     */
    List<TagVO> findByArticleIdToTags(@Param("id") Long id);

    @MapKey("id")
    List<Map<String, Object>> countTags();

    /**
     * 存储文章和标签映射关系
     * @param id
     * @param tagsList
     */
    void saveArticleTags(@Param("id") Long id, @Param("tagsList") List<Long> tagsList);


    /**
     * 通过文章id删除映射表
     * @param ids
     */
    void deleteArticleTag(@Param("ids") List<Long> ids);

    /**
     * 查询文章的标签
     *
     * @param id
     * @return
     */
    List<String> selectByArticleId(@Param("id") Long id);

    /**
     * 更改排序
     * @param id
     * @param sort
     */
    void updateSort(@Param("id") Long id, @Param("sort") Integer sort);

    /**
     * 通过标签id删除映射表
     * @param ids
     */
    void deleteTagId(@Param("ids") List<Long> ids);

}

